from django.db import models


# Create your models here.
class Author(models.Model):
    """作者表"""
    # id = models.AutoField(primary_key=True)
    # 其实模型类中的id主键字段不需要我们手动指定，django的orm默认会给每张表都添加一个id字段并且为主键，如果我们自己指定了主键，以我们自己指定的为准,就不会自动帮你添加主键字段了
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    sex_type = ((1, '男性'), (2, '女性'), (3, '保密'))
    sex = models.IntegerField(choices=sex_type, default=1)
    # ad = models.ForeignKey(to='AuthorDetail',to_field='id',on_delete=models.CASCADE)
    ad = models.ForeignKey('AuthorDetail', on_delete=models.CASCADE)

    # books = models.ManyToManyField('Book')

    # models.ForeignKey(AuthorDetail)这里面的外键关联的表，可以不写引号，但是如果不写引号，那么这个外键关联的表必须在写这个外键字段的表上面，一般我们都写上引号，这样就不用考虑哪个表写在上面，哪个表写在下面了
    # ad = models.ForeignKey(AuthorDetail, on_delete=models.CASCADE)
    # to=可以用写，to_field='id'也可以不用写，自动找到是to=那张表的id字段
    # django 1.11 版本的foreignkey 默认有on_delete=models.CASCADE这个属性，所以如果要做这种级联删除模式，可以不用写这个属性，但是django2.0之后，必须要自己手动加上这个属性

    # 关于级联（自行丰富）
    # models.CASCADE 级联删除 #没办法设置级联更新，要做级联更新，自己通过原生sql去加上，就是修改表
    def __str__(self):
        return self.name


class AuthorDetail(models.Model):
    """作者详细信息表"""
    birthday = models.DateField()
    telephone = models.CharField(max_length=24)
    address = models.CharField(max_length=64)
    # 通过手机号查找某人  手机号151开头


class Publish(models.Model):
    name = models.CharField(max_length=64)
    city = models.CharField(max_length=64)

    def __str__(self):
        return self.name


class Book(models.Model):
    title = models.CharField(max_length=64)
    pub_date = models.DateField()
    price = models.DecimalField(max_digits=10, decimal_places=2)
    pub = models.ForeignKey('Publish')
    # ForeignKey这个类，生成数据库字段的时候，会自动将该属性名称_id作为我们的数据库字段名称
    authors = models.ManyToManyField('Author')

    # authors在执行数据库同步指令之后，不会生成字段，而是会帮我们生成一个第三张表，这个表就是书籍表和作者表的多对多关系表
    def __str__(self):
        return self.title

    def get_all_author(self):
        # 方式1
        # name_list = []
        # for author in self.authors.all():
        #     name_list.append(author.name)
        # name_list_str = ','.join(name_list)
        # return name_list_str

        # 方式2
        return ','.join([author.name for author in self.authors.all()])
